Skip to content

Release 1229.0.0 - #10080

Merged
adonesky1 merged 4 commits into
mainfrom
release/1229.0.0
Sep 2, 2026
Merged

Release 1229.0.0#10080
adonesky1 merged 4 commits into
mainfrom
release/1229.0.0

Conversation

@adonesky1

@adonesky1 adonesky1 commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Explanation

Summary

Publish @metamask/phishing-controller 17.4.1 and @metamask/transaction-controller 69.8.0 so clients can pick up the address-poisoning known-set fix from #9943.

Problem

Phishing known recipients were hydrated via getEffectiveRecipient, which falls back to txParams.to for non-transfers. Confirmed approves and contract interactions therefore seeded token and protocol addresses into the comparison set, and vanity factories could 4+4-match each other (false positives on Permit2 approves).

Solution

  • @metamask/transaction-controller@69.8.0 (minor): export getSendRecipients for user-chosen send payees only
  • @metamask/phishing-controller@17.4.1 (patch): hydrate known recipients from getSendRecipients instead of getEffectiveRecipient, plus the pending C2 blocklist Set optimization and transaction-controller range bump to ^69.8.0

Workspace dependents bump their @metamask/phishing-controller / @metamask/transaction-controller ranges but are not published in this release.

Risk

No breaking API changes. Known-set membership narrows to real send payees (correct for poisoning). Clients still on older phishing-controller keep the old set until they bump.

Intentionally skipped

@metamask/address-book-controller, @metamask/base-controller, @metamask/controller-utils, @metamask/messenger, @metamask/accounts-controller, @metamask/approval-controller, @metamask/core-backend, @metamask/gas-fee-controller, @metamask/network-controller, @metamask/remote-feature-flag-controller, and @metamask/eth-block-tracker have unrelated unreleased changes and are not required for #9943.

@metamask/phishing-controller@17.4.1

Changed

  • Optimize C2 domain blocklist lookups by switching internal storage from Array to Set (#6388)
  • Bump @metamask/transaction-controller from ^69.5.2 to ^69.8.0

Fixed

  • Restrict address poisoning known recipients to user-chosen send payees (#9943)

@metamask/transaction-controller@69.8.0

Added

  • Export getSendRecipients (#9943)

Changed

  • Bump @metamask/utils from ^11.11.0 to ^11.12.0 (#10076)

References

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed
  • I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them

Note

Low Risk
Release packaging and dependency alignment; behavioral fixes ship via already-reviewed controller versions with no additional logic in this PR.

Overview
Cuts monorepo release 1229.0.0 and publishes @metamask/phishing-controller@17.4.1 and @metamask/transaction-controller@69.8.0, with version/changelog/yarn.lock updates only (no new application source in this diff).

@metamask/transaction-controller@69.8.0 documents export of getSendRecipients so callers can resolve user-chosen send payees (simple sends, decoded transfers, swap-and-send, batch sends) without treating txParams.to as the payee.

@metamask/phishing-controller@17.4.1 documents switching address-poisoning “known recipient” hydration to getSendRecipients instead of getEffectiveRecipient, plus C2 blocklist storage moved from Array to Set for O(1) lookups.

Workspace packages that depend on phishing or transaction-controller bump to ^17.4.1 / ^69.8.0 (e.g. assets-controller, bridge, wallet); those packages are not newly published here—only the two security-related controllers and the root monorepo version.

Reviewed by Cursor Bugbot for commit 265147e. Bugbot is set up for automated code reviews on this repo. Configure here.

@adonesky1 adonesky1 added team-product-safety Push issues to Product Safety team release:keep-open Prevent auto-close of inactive release/* PRs (3h) labels Sep 2, 2026
@adonesky1
adonesky1 marked this pull request as ready for review September 2, 2026 20:25
@adonesky1
adonesky1 requested review from a team as code owners September 2, 2026 20:25
@metamask-ci

metamask-ci Bot commented Sep 2, 2026

Copy link
Copy Markdown

✅ No changelog changes needed.

@mcmire mcmire left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@adonesky1
adonesky1 added this pull request to the merge queue Sep 2, 2026
Merged via the queue into main with commit 984bfda Sep 2, 2026
140 checks passed
@adonesky1
adonesky1 deleted the release/1229.0.0 branch September 2, 2026 21:05
pull Bot pushed a commit to Reality2byte/metamask-extension that referenced this pull request Sep 4, 2026
…etaMask#45982)

## **Description**

Bump `@metamask/phishing-controller` to `^17.4.1` and
`@metamask/transaction-controller` to `^69.8.0` so the extension picks
up the address-poisoning known-set fix from
[MetaMask/core#9943](MetaMask/core#9943),
published in
[MetaMask/core#10080](MetaMask/core#10080).

### Summary

Ship the controller-side known-recipient cleanup that complements the
confirmation-side gate already merged in
[MetaMask#45724](MetaMask#45724).

### Problem

`PhishingController` was still hydrating known recipients via
`getEffectiveRecipient`, so confirmed approves and other non-sends could
put token/protocol addresses into the comparison set and cause
false-positive lookalike warnings.

### Solution

- Bump `@metamask/phishing-controller` `^17.4.0` → `^17.4.1` (known set
uses `getSendRecipients`)
- Bump `@metamask/transaction-controller` `^69.5.1` → `^69.8.0` (exports
`getSendRecipients`; required by phishing-controller 17.4.1)
- Bump `@metamask/utils` `^11.11.0` → `^11.12.1` to consume the
published ESM fix from
[MetaMask/utils#309](MetaMask/utils#309)
- Import `getSendRecipients` from `@metamask/transaction-controller` and
delete the temporary local copy / tests introduced in MetaMask#45724
- Deduplicate compatible 17.4.x, 69.x, and utils 11.x ranges to a single
copy each

`transaction-controller@69.8.0` depends on `@metamask/utils@^11.12.0`,
so it resolves directly to the fixed 11.12.1 patch release. The
temporary Yarn patch is no longer needed.

The LavaMoat grant allowing `@metamask/utils` to import
`@metamask/scure-bip39` remains necessary because utils 11.12 added that
dependency. Without it, the background cannot start (`Policy does not
allow importing @metamask/scure-bip39 from @metamask/utils`) and E2E
times out on `.controller-loaded`.

No breaking API adaptations required.

### Risk

Low. Additive/non-breaking package bumps plus swapping a local helper
for the published export. The confirmation gate from MetaMask#45724 already
avoids scanning non-send candidates; this bump cleans the in-memory
known set on controller construction. Utils 11.12.1 is a patch release
that corrects ESM module interop without changing mnemonic behavior.

## **Changelog**

CHANGELOG entry: Fixed address-poisoning detection so confirmed token
approves and other non-send transactions no longer seed lookalike
comparisons against token or protocol contract addresses.

## **Related issues**

Fixes:

- Consumes
[MetaMask/core#9943](MetaMask/core#9943)
- Released in
[MetaMask/core#10080](MetaMask/core#10080)
- ESM compatibility fix:
[MetaMask/utils#309](MetaMask/utils#309)
- Follow-up to
[MetaMask#45724](MetaMask#45724)
- Ticket:
[PSAFE-633](https://consensyssoftware.atlassian.net/browse/PSAFE-633)

## **Manual testing steps**

1. Pull this branch, run `yarn install`, and start a development build.
2. On Base, submit and confirm an `approve(Permit2, 0)` against a vanity
token contract (for example Base Uncle). Wait until Activity shows
confirmed.
3. Submit a native send to a lookalike of that token contract address
(same first 4 / last 4 hex characters). Cancel rather than confirming.
4. Confirm no address-poisoning warning appears. On a build pinned to
`phishing-controller@17.4.0`, that send warns because the approve seeded
the token contract into the known set.
5. Confirm a real native send to a new address, then submit a lookalike
of that payee and cancel it. Confirm the address-poisoning warning still
appears for a real prior send payee.

## **Screenshots/Recordings**

See verification artifacts on
[MetaMask/core#9943](MetaMask/core#9943) and
[MetaMask#45724](MetaMask#45724).

### **Before**

Confirmed approve could seed a token contract into the phishing known
set, so a later send to a lookalike of that contract warned.

### **After**

Confirmed approve does not seed the known set; lookalike send against
the token contract does not warn. Real prior send payees still trigger
the warning.

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

[PSAFE-633]:
https://consensyssoftware.atlassian.net/browse/PSAFE-633?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Non-breaking dependency bumps and a straight swap from a duplicated
helper to the published export; behavior change is limited to phishing
known-set population for address-poisoning detection.
> 
> **Overview**
> Upgrades **`@metamask/phishing-controller`** to `^17.4.1`,
**`@metamask/transaction-controller`** to `^69.8.0`, and
**`@metamask/utils`** to `^11.12.1` so address-poisoning known-recipient
hydration uses **`getSendRecipients`** instead of treating
token/protocol addresses from approves and other non-sends as prior
payees.
> 
> The confirmation hook **`useAddressPoisoningAlert`** now imports
**`getSendRecipients`** from `@metamask/transaction-controller`; the
temporary local **`getSendRecipients`** implementation and its unit
tests are removed, with the alert test mocking the package export.
> 
> Sentry masks and the E2E state-log fixture add
**`batchTransactionCounts`** for the transaction controllers introduced
in the bumped **`transaction-controller`** version.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
4ef3cd6. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release:keep-open Prevent auto-close of inactive release/* PRs (3h) team-product-safety Push issues to Product Safety team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants